<?php
class mydir{
	/*
	 * 基于安全的情况下，获取某个目录下的所有文件列表
	 * @param $dir 目录地址，@todo 要防止访问站点以外的文件列表
	 * */
	public static function getNoRecursiveFileList($dir,$includeDir=false,$gbToUtf8=false){
		$d = dir($dir);
		$fileList = array();
		while (false !== ($file = $d->read())) {
			if($gbToUtf8) $file = iconv("gb2312","utf-8//TRANSLIT",$file);
			if($file != '.' && $file != '..'){
                if($includeDir){
                    array_push($fileList,$file);
                }else{//不含目录
                    if(!is_dir($dir."/".$file)) array_push($fileList,$file);
                }
			}
		}
		$d->close();
		return $fileList;
	}

    /*
    * @return 只获取一个目录下所有文件(含目录)
    * */
    public static function getOneDirFiles($dir,$includeDir=false,$gbToUtf8=false){
        return self::getNoRecursiveFileList($dir,$includeDir,$gbToUtf8);
    }


    /*
     * @return 递归获取一个目录下所有文件
     * */
    public static function getRecursiveFileList($dir){
        return self::getRecursiveFileList($dir);
    }

	/*
	 * 獲取目錄包含子目錄下的所有文件列表
	 * @param 目錄
	 * @return 包含子目录下所有文件
	 * */
	public static function  getAllFiles($dir){
		$files = array();
		if ( $handle = opendir($dir) ) {
			while ( ($file = readdir($handle)) !== false ) {
				if ( $file != ".." && $file != "." ) {
					if ( is_dir($dir . "/" . $file) ) {
						$files[] = $dir . "/" . $file.'/';
						$files = array_merge($files,self::getAllFiles($dir . "/" . $file));//递归
					}else {
						$files[] = $dir . "/" . $file;
					}
				}
			}

			closedir($handle);
			return $files;
		}
	}
}
